﻿/*
 * @文件描述:常用的滤波算法集合
 * @版本:
 * @作者:周晨阳
 * @Date:2021-10-27 10:35:55
 */
using System;

/// <summary>
/// 一些常用的算法库
/// </summary>
public static class MYDSP
{
    //中位值平均滤波法（防脉冲干扰平均滤波法）
    //方法解析：
    //相当于中位值滤波+算术平均滤波，连续采样N个数据，去掉一个最大值和一个最小值，然后计算N-2个数据的算术平均值。
    //N值的选取：3-14
    //优点：融合了两种滤波法的优点
    //对于偶然出现的脉冲性干扰，可消除由于脉冲干扰所引起的采样值偏差。
    //缺点：
    //测量速度较慢，和算法平均滤波一样，浪费RAM。
    public static float filter(float[] ary, int num)
    {
        int angleDataloopTemp2 = 0; //取平均的个数
        float finalData = 0;
        float maxValue = ary[angleDataloopTemp2];
        float minValue = ary[angleDataloopTemp2];
        for (angleDataloopTemp2 = 0; angleDataloopTemp2 < num; angleDataloopTemp2++) //找出最大值和最小值
        {
            if (ary[angleDataloopTemp2] > maxValue) //去掉最大值最小值
            {
                maxValue = ary[angleDataloopTemp2];
            }
            if (ary[angleDataloopTemp2] < minValue) //去掉最大值最小值
            {
                minValue = ary[angleDataloopTemp2];
            }
            finalData += ary[angleDataloopTemp2];
        }
        finalData -= (maxValue + minValue); //去掉最大值最小值
        finalData /= (num - 2);             //取平均值
        return finalData;
    }

}
